home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / xb / xbfunc.has < prev    next >
Text File  |  1996-01-21  |  25KB  |  1,720 lines

  1.  
  2. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  3. *
  4. *    xbfunc.has  ……   ぺけ-BASICの標準関数
  5. *
  6. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  7.  
  8.  
  9.     .include    doscall.mac
  10.     .include    iocscall.mac
  11.     .include    fefunc.h
  12.     .include    fdef.h
  13.  
  14.     .include    variable.h
  15.  
  16.  
  17.     .xref    hash
  18.  
  19.  
  20.     .text
  21.     .even
  22.  
  23.     .xdef    standard_init
  24. standard_init:
  25.     move.w    d5,-(sp)
  26.  
  27.     lea.l    ptr_token(pc),a5
  28.     lea.l    ptr_param(pc),a0
  29.     lea.l    ptr_exec(pc),a1
  30.     moveq    #0,d3
  31. standard_init_loop:
  32.     bsr    hash
  33.  * a2.l = 元の対象の開始アドレス
  34.  * d4.l = (hash.w)(文字数 - 1)
  35.     move.l    d4,(a4)+    * (hash.w)(文字数 - 1)
  36.     move.l    a2,(a4)+    * 名前
  37.     move.w    (a0,d3.w),d0
  38.     lea.l    (a0,d0.w),a2
  39.     move.l    a2,(a4)+    * パラメータリストを指すポインタ
  40.     move.w    (a1,d3.w),d0
  41.     lea.l    (a1,d0.w),a2
  42.     move.l    a2,(a4)+    * 実行アドレス
  43.  
  44.     addq.w    #1,d6
  45.     addq.w    #2,d3
  46.     addq.l    #1,a5        * $00
  47.  
  48.     tst.b    (a5)
  49.     bne    standard_init_loop
  50.  
  51.  
  52.  * 標準関数の初期化処理
  53.     move.w    #-1,strtok_work
  54.  
  55.  
  56.     move.w    (sp)+,d5
  57.     rts
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. ptr_token:
  68.  
  69. * 数値演算
  70.     .dc.b    'pi',0
  71.     .dc.b    'abs',0
  72.     .dc.b    'fix',0
  73.     .dc.b    'int',0
  74.     .dc.b    'sgn',0
  75.     .dc.b    'sin',0
  76.     .dc.b    'cos',0
  77.     .dc.b    'tan',0
  78.     .dc.b    'atan',0
  79.     .dc.b    'log',0
  80.     .dc.b    'exp',0
  81.     .dc.b    'pow',0
  82.     .dc.b    'sqr',0
  83.     .dc.b    'randomize',0
  84.     .dc.b    'rnd',0
  85.     .dc.b    'rand',0
  86.     .dc.b    'srand',0
  87.  
  88. * データ変換
  89.     .dc.b    'atof',0
  90.     .dc.b    'atoi',0
  91.     .dc.b    'ecvt',0
  92.     .dc.b    'fcvt',0
  93.     .dc.b    'gcvt',0
  94.     .dc.b    'itoa',0
  95.     .dc.b    'str$',0
  96.     .dc.b    'val',0
  97. **    .dc.b    'using$',0        **
  98. **    .dc.b    'atob',0        **
  99.  
  100.     .dc.b    'asc',0
  101.     .dc.b    'instr',0
  102.     .dc.b    'len',0
  103.     .dc.b    'bin$',0
  104.     .dc.b    'chr$',0
  105.     .dc.b    'hex$',0
  106.     .dc.b    'left$',0
  107.     .dc.b    'mid$',0
  108.     .dc.b    'mirror$',0
  109.     .dc.b    'oct$',0
  110.     .dc.b    'right$',0
  111.     .dc.b    'space$',0
  112.     .dc.b    'spc',0
  113.     .dc.b    'tab',0
  114.     .dc.b    'string$',0
  115. **    .dc.b    'float$',0        **
  116. **    .dc.b    'hexfloat',0        **
  117.  
  118. * 文字列処理
  119.     .dc.b    'strchr',0
  120.     .dc.b    'strcspn',0
  121.     .dc.b    'strlen',0
  122.     .dc.b    'strlwr',0
  123.     .dc.b    'strnset',0
  124.     .dc.b    'strrchr',0
  125.     .dc.b    'strrev',0
  126.     .dc.b    'strset',0
  127.     .dc.b    'strspn',0
  128.     .dc.b    'strtok',0
  129.     .dc.b    'strupr',0
  130.     .dc.b    'isalnum',0
  131.     .dc.b    'isalpha',0
  132.     .dc.b    'isascii',0
  133.     .dc.b    'iscntrl',0
  134.     .dc.b    'isdigit',0
  135.     .dc.b    'isgraph',0
  136.     .dc.b    'islower',0
  137.     .dc.b    'isprint',0
  138.     .dc.b    'ispunct',0
  139.     .dc.b    'isspace',0
  140.     .dc.b    'isupper',0
  141.     .dc.b    'isxdigit',0
  142.     .dc.b    'toascii',0
  143.     .dc.b    'tolower',0
  144.     .dc.b    'toupper',0
  145.  
  146. * ファイル入出力
  147.     .dc.b    'dskf',0
  148.     .dc.b    'fclose',0
  149.     .dc.b    'fcloseall',0
  150.     .dc.b    'feof',0
  151.     .dc.b    'fgetc',0
  152.     .dc.b    'fopen',0
  153.     .dc.b    'fputc',0
  154.     .dc.b    'fread',0
  155.     .dc.b    'freads',0
  156.     .dc.b    'fseek',0
  157.     .dc.b    'fwrite',0
  158.     .dc.b    'fwrites',0
  159.     .dc.b    'fdelete',0
  160.     .dc.b    'frename',0
  161.  
  162.  
  163.  
  164.     .dc.b    0
  165.     .even
  166.  
  167.  
  168.  
  169.  
  170. ptr_param:
  171. pp:
  172.     .dc.w    p_pi-pp
  173.     .dc.w    p_abs-pp
  174.     .dc.w    p_fix-pp
  175.     .dc.w    p_int-pp
  176.     .dc.w    p_sgn-pp
  177.     .dc.w    p_sin-pp
  178.     .dc.w    p_cos-pp
  179.     .dc.w    p_tan-pp
  180.     .dc.w    p_atan-pp
  181.     .dc.w    p_log-pp
  182.     .dc.w    p_exp-pp
  183.     .dc.w    p_pow-pp
  184.     .dc.w    p_sqr-pp
  185.     .dc.w    p_randomize-pp
  186.     .dc.w    p_rnd-pp
  187.     .dc.w    p_rand-pp
  188.     .dc.w    p_srand-pp
  189.     .dc.w    p_atof-pp
  190.     .dc.w    p_atoi-pp
  191.     .dc.w    p_ecvt-pp
  192.     .dc.w    p_fcvt-pp
  193.     .dc.w    p_gcvt-pp
  194.     .dc.w    p_itoa-pp
  195.     .dc.w    p_strS-pp
  196.     .dc.w    p_val-pp
  197.     .dc.w    p_asc-pp
  198.     .dc.w    p_instr-pp
  199.     .dc.w    p_len-pp
  200.     .dc.w    p_binS-pp
  201.     .dc.w    p_chrS-pp
  202.     .dc.w    p_hexS-pp
  203.     .dc.w    p_leftS-pp
  204.     .dc.w    p_midS-pp
  205.     .dc.w    p_mirrorS-pp
  206.     .dc.w    p_octS-pp
  207.     .dc.w    p_rightS-pp
  208.     .dc.w    p_spaceS-pp
  209.     .dc.w    p_spc-pp
  210.     .dc.w    p_tab-pp
  211.     .dc.w    p_stringS-pp
  212.     .dc.w    p_strchr-pp
  213.     .dc.w    p_strcspn-pp
  214.     .dc.w    p_len-pp
  215.     .dc.w    p_strlwr-pp
  216.     .dc.w    p_strnset-pp
  217.     .dc.w    p_strrchr-pp
  218.     .dc.w    p_strrev-pp
  219.     .dc.w    p_strset-pp
  220.     .dc.w    p_strspn-pp
  221.     .dc.w    p_strtok-pp
  222.     .dc.w    p_strupr-pp
  223.     .dc.w    p_isalnum-pp
  224.     .dc.w    p_isalpha-pp
  225.     .dc.w    p_isascii-pp
  226.     .dc.w    p_iscntrl-pp
  227.     .dc.w    p_isdigit-pp
  228.     .dc.w    p_isgraph-pp
  229.     .dc.w    p_islower-pp
  230.     .dc.w    p_isprint-pp
  231.     .dc.w    p_ispunct-pp
  232.     .dc.w    p_isspace-pp
  233.     .dc.w    p_isupper-pp
  234.     .dc.w    p_isxdigit-pp
  235.     .dc.w    p_toascii-pp
  236.     .dc.w    p_tolower-pp
  237.     .dc.w    p_toupper-pp
  238.     .dc.w    p_dskf-pp
  239.     .dc.w    p_fclose-pp
  240.     .dc.w    p_fcloseall-pp
  241.     .dc.w    p_feof-pp
  242.     .dc.w    p_fgetc-pp
  243.     .dc.w    p_fopen-pp
  244.     .dc.w    p_fputc-pp
  245.     .dc.w    p_fread-pp
  246.     .dc.w    p_freads-pp
  247.     .dc.w    p_fseek-pp
  248.     .dc.w    p_fwrite-pp
  249.     .dc.w    p_fwrites-pp
  250.     .dc.w    p_fdelete-pp
  251.     .dc.w    p_frename-pp
  252.  
  253.  
  254. ptr_exec:
  255. pe:
  256.     .dc.w    pi-pe
  257.     .dc.w    abs-pe
  258.     .dc.w    fix-pe
  259.     .dc.w    int-pe
  260.     .dc.w    sgn-pe
  261.     .dc.w    sin-pe
  262.     .dc.w    cos-pe
  263.     .dc.w    tan-pe
  264.     .dc.w    atan-pe
  265.     .dc.w    log-pe
  266.     .dc.w    exp-pe
  267.     .dc.w    pow-pe
  268.     .dc.w    sqr-pe
  269.     .dc.w    randomize-pe
  270.     .dc.w    rnd-pe
  271.     .dc.w    rand-pe
  272.     .dc.w    srand-pe
  273.     .dc.w    atof-pe
  274.     .dc.w    atoi-pe
  275.     .dc.w    ecvt-pe
  276.     .dc.w    fcvt-pe
  277.     .dc.w    gcvt-pe
  278.     .dc.w    itoa-pe
  279.     .dc.w    strS-pe
  280.     .dc.w    val-pe
  281.     .dc.w    asc-pe
  282.     .dc.w    instr-pe
  283.     .dc.w    len-pe
  284.     .dc.w    binS-pe
  285.     .dc.w    chrS-pe
  286.     .dc.w    hexS-pe
  287.     .dc.w    leftS-pe
  288.     .dc.w    midS-pe
  289.     .dc.w    mirrorS-pe
  290.     .dc.w    octS-pe
  291.     .dc.w    rightS-pe
  292.     .dc.w    spaceS-pe
  293.     .dc.w    spc-pe
  294.     .dc.w    tab-pe
  295.     .dc.w    stringS-pe
  296.     .dc.w    strchr-pe
  297.     .dc.w    strcspn-pe
  298.     .dc.w    len-pe
  299.     .dc.w    strlwr-pe
  300.     .dc.w    strnset-pe
  301.     .dc.w    strrchr-pe
  302.     .dc.w    strrev-pe
  303.     .dc.w    strset-pe
  304.     .dc.w    strspn-pe
  305.     .dc.w    strtok-pe
  306.     .dc.w    strupr-pe
  307.     .dc.w    isalnum-pe
  308.     .dc.w    isalpha-pe
  309.     .dc.w    isascii-pe
  310.     .dc.w    iscntrl-pe
  311.     .dc.w    isdigit-pe
  312.     .dc.w    isgraph-pe
  313.     .dc.w    islower-pe
  314.     .dc.w    isprint-pe
  315.     .dc.w    ispunct-pe
  316.     .dc.w    isspace-pe
  317.     .dc.w    isupper-pe
  318.     .dc.w    isxdigit-pe
  319.     .dc.w    toascii-pe
  320.     .dc.w    tolower-pe
  321.     .dc.w    toupper-pe
  322.     .dc.w    dskf-pe
  323.     .dc.w    fclose-pe
  324.     .dc.w    fcloseall-pe
  325.     .dc.w    feof-pe
  326.     .dc.w    fgetc-pe
  327.     .dc.w    fopen-pe
  328.     .dc.w    fputc-pe
  329.     .dc.w    fread-pe
  330.     .dc.w    freads-pe
  331.     .dc.w    fseek-pe
  332.     .dc.w    fwrite-pe
  333.     .dc.w    fwrites-pe
  334.     .dc.w    fdelete-pe
  335.     .dc.w    frename-pe
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343. *-------------------
  344.  
  345.  
  346.  * float 返り値 *
  347.  
  348. p_pi:
  349.     .dc.w    float_omt    * 省略可能なFLOAT
  350.     .dc.w    float_ret
  351.  
  352. p_pow:
  353.     .dc.w    float_val    * 省略不能なFLOAT
  354. p_abs:
  355. p_fix:
  356. p_sgn:
  357. p_sin:
  358. p_cos:
  359. p_tan:
  360. p_atan:
  361. p_log:
  362. p_exp:
  363. p_sqr:
  364. p_int:
  365.     .dc.w    float_val    * 省略不能なFLOAT
  366. p_rnd:
  367.     .dc.w    float_ret
  368.  
  369.  
  370. p_atof:
  371. p_val:
  372.     .dc.w    str_val
  373.     .dc.w    float_ret
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  * int 返り値 *
  381.  
  382. p_rand:
  383.     .dc.w    int_ret
  384.  
  385.  
  386. p_instr:
  387.     .dc.w    int_val
  388. p_strcspn:
  389. p_strspn:
  390.     .dc.w    str_val
  391. p_asc:
  392. p_len:
  393. p_atoi:
  394.     .dc.w    str_val
  395.     .dc.w    int_ret
  396.  
  397.  
  398. p_strchr:
  399. p_strrchr:
  400.     .dc.w    str_val
  401. p_isalnum:
  402. p_isalpha:
  403. p_isascii:
  404. p_iscntrl:
  405. p_isdigit:
  406. p_isgraph:
  407. p_islower:
  408. p_isprint:
  409. p_ispunct:
  410. p_isspace:
  411. p_isupper:
  412. p_isxdigit:
  413. p_toascii:
  414. p_tolower:
  415. p_toupper:
  416. p_dskf:
  417.     .dc.w    char_val
  418.     .dc.w    int_ret
  419.  
  420.  
  421.  
  422.  
  423. p_fputc:
  424.     .dc.w    char_val
  425. p_fclose:
  426. p_feof:
  427. p_fgetc:
  428.     .dc.w    int_val
  429. p_fcloseall:
  430.     .dc.w    int_ret
  431.  
  432.  
  433. p_fread:
  434. p_fwrite:
  435.     .dc.w    ary1_fic
  436.     .dc.w    int_val
  437.     .dc.w    int_val
  438.     .dc.w    int_ret
  439.  
  440. p_freads:
  441.     .dc.w    str_vp
  442.     .dc.w    int_val
  443.     .dc.w    int_ret
  444.  
  445. p_fwrites:
  446.     .dc.w    str_val
  447.     .dc.w    int_val
  448.     .dc.w    int_ret
  449.  
  450.  
  451. p_fseek:
  452.     .dc.w    int_val
  453.     .dc.w    int_val
  454.     .dc.w    int_val
  455.     .dc.w    int_ret
  456.  
  457.  
  458. p_fopen:
  459. p_frename:
  460.     .dc.w    str_val
  461. p_fdelete:
  462.     .dc.w    str_val
  463.     .dc.w    int_ret
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  * str 返り値 *
  472.  
  473.  
  474. p_leftS:
  475. p_rightS:
  476.     .dc.w    str_val
  477. p_binS:
  478. p_octS:
  479. p_hexS:
  480. p_spaceS:
  481. p_spc:
  482. p_tab:
  483. p_itoa:
  484.     .dc.w    int_val
  485.     .dc.w    str_ret
  486.  
  487.  
  488. p_midS:
  489.     .dc.w    str_val
  490.     .dc.w    int_val
  491.     .dc.w    int_val
  492.     .dc.w    str_ret
  493.  
  494.  
  495. p_gcvt:
  496.     .dc.w    float_val
  497.     .dc.w    int_val
  498.     .dc.w    str_ret
  499.  
  500. p_strnset:
  501.     .dc.w    str_vp
  502.     .dc.w    char_val
  503.     .dc.w    int_val
  504.     .dc.w    str_ret
  505.  
  506.  
  507. p_ecvt:
  508. p_fcvt:
  509.     .dc.w    float_val
  510.     .dc.w    int_val
  511.     .dc.w    int_vp
  512.     .dc.w    int_vp
  513.     .dc.w    str_ret
  514.  
  515.  
  516. p_strS:
  517.     .dc.w    float_val
  518.     .dc.w    str_ret
  519.  
  520. p_strtok:
  521.     .dc.w    str_val
  522.     .dc.w    str_val
  523.     .dc.w    str_ret
  524.  
  525.  
  526.  
  527. p_stringS:
  528.     .dc.w    int_val
  529. p_mirrorS:
  530.     .dc.w    str_val
  531.     .dc.w    str_ret
  532.  
  533.  
  534. p_strlwr:
  535. p_strupr:
  536. p_strrev:
  537.     .dc.w    str_vp
  538.     .dc.w    str_ret
  539.  
  540.  
  541. p_strset:
  542.     .dc.w    str_vp
  543. p_chrS:
  544.     .dc.w    char_val
  545.     .dc.w    str_ret
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554. p_randomize:
  555. p_srand:
  556.     .dc.w    int_val
  557.     .dc.w    void_ret
  558.  
  559. *-------------------
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584. *-------------------
  585.  
  586. dskf:
  587.     moveq    #0,d0
  588.     move.b    par1+9(sp),d0
  589.     lea.l    tmp,a0
  590.     move.l    a0,-(sp)
  591.     move.w    d0,-(sp)
  592.     DOS    _DSKFRE
  593.     addq.l    #6,sp
  594.     tst.l    d0
  595.     bmi    doscall_err
  596.     move.w    (a0),d0
  597.     mulu    4(a0),d0
  598.     mulu    6(a0),d0
  599.     bra    return_d0
  600.  
  601.  
  602. fclose:
  603.     move.w    par1+8(sp),-(sp)
  604.     DOS    _CLOSE
  605.     addq.l    #2,sp
  606.     tst.l    d0
  607.     bge    file_end
  608.     bra    doscall_err
  609. fcloseall:
  610.     DOS    _ALLCLOSE
  611.     bra    file_end
  612. feof:                    * by Eriko Tachibana
  613.     moveq    #1,d0
  614.     move.w    d0,-(sp)        * 現在位置から
  615.     move.l    d0,-(sp)        * 1バイト後方に移動
  616.     move.w    6+par1+8(sp),-(sp)
  617.     DOS    _SEEK
  618.     tst.l    d0
  619.     bmi    feof_err
  620.     moveq    #-1,d0
  621.     move.l    d0,2(sp)        * 1バイト前方に移動
  622.     DOS    _SEEK
  623.     addq.l    #8,sp
  624.     bra    return_zero
  625. feof_err:
  626.     addq.l    #8,sp
  627.     cmpi.w    #-25,d0        * 指定の位置にはシークできまへん
  628.     beq    return_minus
  629.     bra    doscall_err
  630.  
  631. fgetc:
  632.     move.w    par1+8(sp),-(sp)
  633.     DOS    _FGETC
  634.     addq.l    #2,sp
  635.     tst.l    d0
  636.     bge    file_end
  637.     cmpi.w    #$ffff,d0
  638.     beq    return_minus
  639.     bra    doscall_err
  640.  
  641. fopen:
  642.     movea.l    par2+6(sp),a0
  643.     moveq    #$20,d0
  644.     or.b    (a0)+,d0
  645.     cmpi.b    #'r',d0
  646.     beq    fopen_read
  647.     cmpi.b    #'w',d0
  648.     beq    fopen_write
  649.     cmpi.b    #'c',d0
  650.     bne    openmode_err
  651. fopen_create:
  652.     tst.b    (a0)        * c
  653.     bne    openmode_err
  654.  
  655.     move.w    #$20,-(sp)
  656.     move.l    2+par1+6(sp),-(sp)
  657.     DOS    _CREATE
  658.     addq.l    #6,sp
  659.     tst.l    d0
  660.     bge    file_end
  661.     bra    doscall_err
  662.  
  663. fopen_read:
  664.     moveq    #0,d1
  665.     moveq    #$20,d0
  666.     or.b    (a0),d0
  667.     cmpi.b    #'w',d0        * rw
  668.     bne    fopen_ok
  669.     moveq    #2,d1
  670.     addq.l    #1,a0
  671.     bra    fopen_ok
  672.  
  673. fopen_write:
  674.     moveq    #1,d1
  675. fopen_ok:
  676.     tst.b    (a0)
  677.     bne    openmode_err
  678.  
  679.     move.w    d1,-(sp)
  680.     move.l    2+par1+6(sp),-(sp)
  681.     DOS    _OPEN
  682.     addq.l    #6,sp
  683.     tst.l    d0
  684.     bge    file_end
  685.     bra    doscall_err
  686.  
  687.  
  688.  
  689.  
  690. fputc:
  691.     moveq    #0,d0
  692.     move.b    par1+9(sp),d0
  693.     move.w    par2+8(sp),-(sp)
  694.     move.w    d0,-(sp)
  695.     DOS    _FPUTC
  696.     addq.l    #4,sp
  697.     tst.l    d0
  698.     bmi    doscall_err
  699.     moveq    #0,d0
  700.     move.b    par1+9(sp),d0
  701.     bra    return_d0
  702.  
  703. fread:
  704.     bsr    frw_sub
  705.     move.l    d2,-(sp)
  706.     move.l    a0,-(sp)
  707.     move.w    8+par3+8(sp),-(sp)
  708.     DOS    _READ
  709.     lea.l    10(sp),sp
  710.     tst.l    d0
  711.     bge    file_end
  712.     bra    doscall_err
  713. fwrite:
  714.     bsr    frw_sub
  715.     move.l    d2,-(sp)
  716.     move.l    a0,-(sp)
  717.     move.w    8+par3+8(sp),-(sp)
  718.     DOS    _WRITE
  719.     lea.l    10(sp),sp
  720.     tst.l    d0
  721.     bge    file_end
  722.     bra    doscall_err
  723.  
  724. frw_sub:
  725.     move.l    4+par1+6(sp),a0
  726.     addq.l    #6,a0
  727.     move.w    (a0)+,d0        * データのサイズ(1,4,8)
  728.     move.b    1f-1(pc,d0.w),d0    * シフト数 (by Eriko Tachibana)
  729.     moveq    #0,d1
  730.     move.w    (a0)+,d1        * 添え字の大きさ(0~65535)
  731.     move.l    4+par2+6(sp),d2        * 書き込みサイズ
  732.     bmi    無効な要素数
  733.     addq.l    #1,d1
  734.     cmp.l    d2,d1
  735.     bcs    無効な要素数
  736.     lsl.l    d0,d2
  737.     rts
  738. 1:
  739.     .dc.b    0,0,0,2,0,0,0,3
  740.     .even
  741.  
  742.  
  743. fwrites:
  744.     movea.l    par1+6(sp),a0
  745.     move.w    par2+8(sp),-(sp)
  746.     move.l    a0,-(sp)
  747.     DOS    _FPUTS
  748.     addq.l    #6,sp
  749.     tst.l    d0
  750.     bmi    doscall_err
  751.     moveq    #0,d0
  752. @@:
  753.     addq.w    #1,d0
  754.     tst.b    (a0)+
  755.     bne    @b
  756.     subq.w    #1,d0
  757.     bra    return_d0
  758.  
  759. freads:
  760.     move.w    par2+8(sp),-(sp)
  761.     lea.l    tmp,a1
  762.     move.l    a1,-(sp)    * inpptr
  763.     move.w    #$ff_00,(a1)+
  764.     DOS    _FGETS
  765.     addq.l    #6,sp
  766.     tst.l    d0
  767.     bge    @f
  768.     cmpi.w    #$ffff,d0
  769.     beq    return_minus
  770.     bra    doscall_err
  771. @@:
  772.     movea.l    par1+6(sp),a0
  773.     moveq    #0,d0
  774. @@:
  775.     addq.w    #1,d0
  776.     move.b    (a1)+,(a0)+
  777.     bne    @b
  778.     subq.w    #1,d0
  779.     beq    return_d0    * EOF($1a) check (H8/1/21)
  780.     cmpi.b    #$1a,-2(a0)
  781.     bne    return_d0
  782. *    subq.w    #1,d0
  783.     moveq    #-1,d0
  784.     clr.b    -2(a0)
  785.     bra    return_d0
  786.  
  787.  
  788.  
  789. fseek:
  790.     move.w    par3+8(sp),-(sp)
  791.     move.l    2+par2+6(sp),-(sp)
  792.     move.w    6+par1+8(sp),-(sp)
  793.     DOS    _SEEK
  794.     addq.l    #8,sp
  795.     tst.l    d0
  796.     bge    file_end
  797.     bra    doscall_err
  798.  
  799. fdelete:
  800.     move.l    par1+6(sp),-(sp)
  801.     DOS    _DELETE
  802.     addq.l    #4,sp
  803.     tst.l    d0
  804.     bge    file_end
  805.     bra    doscall_err
  806.  
  807. frename:
  808.     move.l    par2+6(sp),-(sp)
  809.     move.l    4+par1+6(sp),-(sp)
  810.     DOS    _RENAME
  811.     addq.l    #8,sp
  812.     tst.l    d0
  813.     bge    file_end
  814.     bra    doscall_err
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828. *-------------------
  829. strchr:
  830.     move.l    par1+6(sp),a0
  831.     move.b    par2+9(sp),d2
  832.     moveq    #0,d0
  833. @@:
  834.     move.b    (a0)+,d1
  835.     beq    return_minus
  836.     addq.w    #1,d0            * 7/11/8 (thanks for NAONAO.)
  837.     cmp.b    d1,d2
  838.     bne    @b
  839.     subq.w    #1,d0            * 7/11/8
  840.     bra    return_d0
  841.  
  842. strcspn:
  843.     move.l    par2+6(sp),a1
  844.     movea.l    a1,a0
  845.     moveq    #-2,d4
  846. @@:
  847.     addq.w    #1,d4
  848.     tst.b    (a0)+
  849.     bne    @b
  850.  
  851.     move.l    par1+6(sp),a0
  852.     moveq    #0,d0
  853. strcspn1:
  854.     move.b    (a0)+,d1
  855.     beq    return_d0
  856.  
  857.     move.w    d4,d2
  858.     bmi    strcspn2
  859.     movea.l    a1,a2
  860. @@:
  861.     cmp.b    (a2)+,d1
  862.     dbeq    d2,@b
  863.     beq    return_d0
  864. strcspn2:
  865.     addq.w    #1,d0
  866.     bra    strcspn1
  867.  
  868.  
  869. strspn:
  870.     move.l    par2+6(sp),a1
  871.     movea.l    a1,a0
  872.     moveq    #-2,d4
  873. @@:
  874.     addq.w    #1,d4
  875.     tst.b    (a0)+
  876.     bne    @b
  877.  
  878.     move.l    par1+6(sp),a0
  879.     moveq    #0,d0
  880. strspn1:
  881.     move.b    (a0)+,d1
  882.     beq    return_d0
  883.  
  884.     move.w    d4,d2
  885.     bmi    strspn2
  886.     movea.l    a1,a2
  887. @@:
  888.     cmp.b    (a2)+,d1
  889.     dbeq    d2,@b
  890.     bne    return_d0
  891. strspn2:
  892.     addq.w    #1,d0
  893.     bra    strspn1
  894.  
  895.  
  896.  
  897.  
  898.  
  899. strlwr:
  900.     move.l    par1+6(sp),a0
  901.     movea.l    a0,a1
  902. @@:
  903.     move.b    (a0)+,d0
  904.     beq    return_a1
  905.     cmpi.b    #'A',d0
  906.     bcs    @b
  907.     cmpi.b    #'Z',d0
  908.     bhi    @b
  909.     ori.b    #$20,-1(a0)
  910.     bra    @b
  911.  
  912. strupr:
  913.     move.l    par1+6(sp),a0
  914.     movea.l    a0,a1
  915. @@:
  916.     move.b    (a0)+,d0
  917.     beq    return_a1
  918.     cmpi.b    #'a',d0
  919.     bcs    @b
  920.     cmpi.b    #'z',d0
  921.     bhi    @b
  922.     andi.b    #$DF,-1(a0)
  923.     bra    @b
  924.  
  925.  
  926. strnset:
  927.     move.l    par1+6(sp),a0
  928.     move.b    par2+9(sp),d0
  929.     move.l    par3+6(sp),d1
  930.     movea.l    a0,a1
  931.     subq.w    #1,d1
  932.     bcs    return_a1
  933. @@:
  934.     tst.b    (a0)
  935.     beq    return_a1
  936.     move.b    d0,(a0)+
  937.     dbra    d1,@b
  938.     bra    return_a1
  939.  
  940. strrchr:
  941.     move.l    par1+6(sp),a0
  942.     move.b    par2+9(sp),d2
  943.     moveq    #0,d0
  944. @@:
  945.     addq.w    #1,d0
  946.     tst.b    (a0)+
  947.     bne    @b
  948.  
  949.     subq.l    #1,a0
  950.     subq.w    #2,d0
  951.     bcs    return_minus
  952.  
  953. @@:
  954.     cmp.b    -(a0),d2
  955.     dbeq    d0,@b
  956.     ext.l    d0
  957.     bra    return_d0
  958.  
  959. strset:
  960.     move.l    par1+6(sp),a0
  961.     move.b    par2+9(sp),d0
  962. @@:
  963.     tst.b    (a0)
  964.     beq    return_a1
  965.     move.b    d0,(a0)+
  966.     bra    @b
  967.  
  968.  
  969.  
  970.  
  971. strrev:
  972.     move.l    par1+6(sp),a1
  973.     move.l    a1,a2
  974.     lea.l    tmp,a0
  975.     moveq    #-1,d0
  976. @@:
  977.     addq.w    #1,d0
  978.     move.b    (a2)+,(a0)+
  979.     bne    @b
  980.  
  981.     subq.w    #1,d0
  982.     bcs    return_nula1
  983.     subq.l    #1,a0
  984.     move.l    a1,a2
  985. @@:
  986.     move.b    -(a0),(a2)+
  987.     dbra    d0,@b
  988.     clr.b    (a2)
  989.     bra    return_a1
  990.  
  991.  
  992. strtok:
  993.     move.l    par1+6(sp),a0
  994.     tst.b    (a0)
  995.     beq    strtok二回目
  996.     lea.l    strtok_buf,a1
  997.     movea.l    a1,a2
  998. @@:
  999.     move.b    (a0)+,(a2)+
  1000.     bne    @b
  1001.     moveq    #0,d0
  1002.     bra    strtok4
  1003.  
  1004.  
  1005. strtok二回目:
  1006.     move.w    strtok_work,d0
  1007.     bmi    return_nul
  1008.     lea.l    strtok_buf,a1
  1009.     adda.w    d0,a1
  1010.  
  1011. strtok4:
  1012.     move.l    par2+6(sp),a0
  1013.     bsr    len_a0
  1014. strtok2:
  1015.     move.b    (a1),d1
  1016.     bsr    check_a0
  1017.     bne    strtok1
  1018.     addq.w    #1,d0
  1019.     addq.l    #1,a1
  1020.     bra    strtok2
  1021.  
  1022. strtok1:
  1023.     lea.l    tmp,a3
  1024. strtok_loop:
  1025.     move.b    (a1)+,d1
  1026.     beq    strtok_end
  1027.     addq.w    #1,d0
  1028.     bsr    check_a0
  1029.     beq    strtok_end
  1030.     move.b    d1,(a3)+
  1031.     bra    strtok_loop
  1032.  
  1033. strtok_end:
  1034.     clr.b    (a3)
  1035.     move.w    d0,strtok_work
  1036.     bra    return_buf
  1037.  
  1038.  
  1039.  
  1040. len_a0:
  1041.     move.l    a0,a2
  1042.     moveq    #0,d2
  1043. @@:
  1044.     addq.w    #1,d2
  1045.     tst.b    (a2)+
  1046.     bne    @b
  1047.     rts
  1048.  
  1049. check_a0:
  1050.     move.l    a0,a2
  1051.     move.l    d2,d3
  1052.     subq.w    #2,d3
  1053.     bcs    check_a0_end
  1054. @@:
  1055.     cmp.b    (a2)+,d1
  1056.     dbeq    d3,@b
  1057. check_a0_end:
  1058.     rts
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067. isalnum:
  1068.     move.b    par1+9(sp),d0
  1069.     cmpi.b    #'0',d0
  1070.     bcs    return_zero
  1071.     cmpi.b    #'9',d0
  1072.     bls    return_minus
  1073. isalpha0:
  1074.     cmpi.b    #'A',d0
  1075.     bcs    return_zero
  1076.     cmpi.b    #'Z',d0
  1077.     bls    return_minus
  1078. islower0:
  1079.     cmpi.b    #'a',d0
  1080.     bcs    return_zero
  1081.     cmpi.b    #'z',d0
  1082.     bls    return_minus
  1083.     bra    return_zero
  1084. isalpha:
  1085.     move.b    par1+9(sp),d0
  1086.     bra    isalpha0
  1087. isascii:
  1088.     move.b    par1+9(sp),d0
  1089.     bge    return_minus
  1090.     bra    return_zero
  1091. iscntrl:
  1092.     move.b    par1+9(sp),d0
  1093.     cmpi.b    #$7f,d0
  1094.     beq    return_minus
  1095.     cmpi.b    #$20,d0
  1096.     bcs    return_minus
  1097.     bra    return_zero
  1098. isdigit:
  1099.     move.b    par1+9(sp),d0
  1100.     cmpi.b    #'0',d0
  1101.     bcs    return_zero
  1102.     cmpi.b    #'9',d0
  1103.     bls    return_minus
  1104.     bra    return_zero
  1105. isgraph:
  1106.     move.b    par1+9(sp),d0
  1107.     cmpi.b    #$21,d0
  1108.     bcs    return_zero
  1109.     cmpi.b    #$7e,d0
  1110.     bls    return_minus
  1111.     bra    return_zero
  1112. islower:
  1113.     move.b    par1+9(sp),d0
  1114.     bra    islower0
  1115. isprint:
  1116.     move.b    par1+9(sp),d0
  1117.     cmpi.b    #$20,d0
  1118.     bcs    return_zero
  1119.     cmpi.b    #$7e,d0
  1120.     bls    return_minus
  1121.     bra    return_zero
  1122. ispunct:
  1123.     move.b    par1+9(sp),d0
  1124.     cmpi.b    #$20,d0
  1125.     bcs    return_zero
  1126.     cmpi.b    #$2f,d0
  1127.     bls    return_minus
  1128.     cmpi.b    #$3a,d0
  1129.     bcs    return_zero
  1130.     cmpi.b    #$40,d0
  1131.     bls    return_minus
  1132.     cmpi.b    #$5b,d0
  1133.     bcs    return_zero
  1134.     cmpi.b    #$60,d0
  1135.     bls    return_minus
  1136.     cmpi.b    #$7b,d0
  1137.     bcs    return_zero
  1138.     cmpi.b    #$7e,d0
  1139.     bls    return_minus
  1140.     bra    return_zero
  1141. isspace:
  1142.     move.b    par1+9(sp),d0
  1143.     cmpi.b    #$20,d0
  1144.     beq    return_minus
  1145.     cmpi.b    #$9,d0
  1146.     bcs    return_zero
  1147.     cmpi.b    #$d,d0
  1148.     bls    return_minus
  1149.     bra    return_zero
  1150. isupper:
  1151.     move.b    par1+9(sp),d0
  1152.     cmpi.b    #'A',d0
  1153.     bcs    return_zero
  1154.     cmpi.b    #'Z',d0
  1155.     bls    return_minus
  1156.     bra    return_zero
  1157. isxdigit:
  1158.     move.b    par1+9(sp),d0
  1159.     cmpi.b    #'0',d0
  1160.     bcs    return_zero
  1161.     cmpi.b    #'9',d0
  1162.     bls    return_minus
  1163.     ori.b    #$20,d0        * 島崎さん、ありがとー
  1164.     cmpi.b    #'a',d0
  1165.     bcs    return_zero
  1166.     cmpi.b    #'f',d0
  1167.     bls    return_minus
  1168.     bra    return_zero
  1169.  
  1170.  
  1171. toascii:
  1172.     moveq    #0,d0
  1173.     move.b    par1+9(sp),d0
  1174.     andi.w    #$7f,d0        * 島崎さん、ありがとー
  1175.     bra    return_d0
  1176. tolower:
  1177.     moveq    #0,d0
  1178.     move.b    par1+9(sp),d0
  1179.     cmpi.b    #'A',d0
  1180.     bcs    return_d0
  1181.     cmpi.b    #'Z',d0
  1182.     bhi    return_d0
  1183.     ori.b    #$20,d0
  1184.     bra    return_d0
  1185.  
  1186. toupper:
  1187.     moveq    #0,d0
  1188.     move.b    par1+9(sp),d0
  1189.     cmpi.b    #'a',d0
  1190.     bcs    return_d0
  1191.     cmpi.b    #'z',d0
  1192.     bhi    return_d0
  1193.     andi.b    #$DF,d0
  1194.     bra    return_d0
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203. *-------------------
  1204. instr:
  1205.     move.l    par2+6(sp),a0
  1206.     move.l    par3+6(sp),a1
  1207.  
  1208.     move.l    par1+6(sp),d1
  1209.     ble    return_zero
  1210.  
  1211.     move.l    d1,d0
  1212.     subq.w    #2,d1
  1213.     bcs    ins1
  1214. @@:
  1215.     tst.b    (a0)+
  1216.     dbeq    d1,@b
  1217.     beq    return_zero
  1218. ins1:
  1219.     move.b    (a1)+,d2
  1220. ins_loop:
  1221.     move.b    (a0)+,d1
  1222.     beq    return_zero
  1223.     cmp.b    d1,d2
  1224.     bne    ins2
  1225.         movea.l    a0,a2
  1226.         movea.l    a1,a3
  1227.     ins2_loop:
  1228.         move.b    (a1)+,d1
  1229.         beq    return_d0
  1230.         cmp.b    (a0)+,d1
  1231.         beq    ins2_loop
  1232.         movea.l    a2,a0
  1233.         movea.l    a3,a1
  1234. ins2:
  1235.     addq.w    #1,d0
  1236.     bra    ins_loop
  1237.  
  1238.  
  1239.  
  1240.  
  1241. midS:
  1242.     move.l    par1+6(sp),a1
  1243.     move.l    a1,a0
  1244.     moveq    #-1,d1
  1245. @@:
  1246.     addq.w    #1,d1
  1247.     tst.b    (a0)+
  1248.     bne    @b
  1249.  
  1250.     move.l    par2+6(sp),d0
  1251.     bmi    return_nul_string        * 7/11/8
  1252.     subq.w    #1,d0
  1253.     blt    return_nul
  1254.     beq    mid1
  1255.     sub.w    d0,d1
  1256.     bcc    @f
  1257.     add.w    d1,d0
  1258.     moveq    #0,d1
  1259. @@:
  1260.     add.w    d0,a1
  1261. mid1:
  1262.     move.l    par3+6(sp),d0
  1263.     bmi    return_nul_string        * 7/11/8
  1264.     sub.w    d0,d1
  1265.     bcc    @f
  1266.     add.w    d1,d0
  1267. @@:
  1268.     bra    rl共通
  1269.  
  1270.  
  1271. rightS:
  1272.     move.l    par1+6(sp),a1
  1273.     move.l    a1,a0
  1274.     moveq    #-1,d1
  1275. @@:
  1276.     addq.w    #1,d1
  1277.     tst.b    (a0)+
  1278.     bne    @b
  1279.  
  1280.     move.l    par2+6(sp),d0
  1281.     bmi    return_nul_string        * 7/11/8
  1282.     sub.w    d0,d1
  1283.     bcc    @f
  1284.     add.w    d1,d0
  1285.     moveq    #0,d1
  1286. @@:
  1287.     add.w    d1,a1
  1288.     bra    rl共通
  1289.  
  1290.  
  1291. leftS:
  1292.     move.l    par1+6(sp),a1
  1293.     move.l    par2+6(sp),d0
  1294.     bmi    return_nul_string        * 7/11/8
  1295. rl共通:
  1296.     lea.l    tmp,a0
  1297.     subq.w    #1,d0
  1298.     bcs    lef_end
  1299. @@:
  1300.     move.b    (a1)+,(a0)+
  1301.     dbra    d0,@b
  1302. lef_end:
  1303.     clr.b    (a0)
  1304.     bra    return_buf
  1305.  
  1306. return_nul_string:
  1307.     lea.l    tmp,a0
  1308.     clr.b    (a0)
  1309.     bra    return_buf
  1310.  
  1311.  
  1312.  
  1313. asc:
  1314.     move.l    par1+6(sp),a0
  1315.     moveq    #0,d0
  1316.     move.b    (a0),d0
  1317.     bra    return_d0
  1318. len:
  1319.     move.l    par1+6(sp),a0
  1320.     moveq    #0,d0
  1321. @@:
  1322.     addq.w    #1,d0
  1323.     tst.b    (a0)+
  1324.     bne    @b
  1325.     subq.w    #1,d0
  1326.     bra    return_d0
  1327.  
  1328. chrS:
  1329.     move.l    par1+6(sp),d0
  1330.     lea.l    tmp,a0
  1331.     move.b    d0,(a0)+
  1332.     clr.b    (a0)
  1333.     bra    return_buf
  1334. binS:
  1335.     move.l    par1+6(sp),d0
  1336.     lea.l    tmp,a0
  1337.     FPACK    __BTOS
  1338.     bra    return_buf
  1339. octS:
  1340.     move.l    par1+6(sp),d0
  1341.     lea.l    tmp,a0
  1342.     FPACK    __OTOS
  1343.     bra    return_buf
  1344. hexS:
  1345.     move.l    par1+6(sp),d0
  1346.     lea.l    tmp,a0
  1347.     FPACK    __HTOS
  1348.     bra    return_buf
  1349.  
  1350.  
  1351.  
  1352. stringS:
  1353.     movea.l    par2+6(sp),a0
  1354.     move.b    (a0),d1
  1355.     bra    ss共通
  1356.  
  1357. tab:
  1358.     moveq    #-1,d1
  1359.     IOCS    _B_LOCATE
  1360.     clr.w    d0
  1361.     swap    d0        * 現在のX座標
  1362.     move.w    par1+8(sp),d1
  1363.     sub.w    d0,d1
  1364.     bhi    @f
  1365.     moveq    #0,d1
  1366. @@:
  1367.     move.w    d1,d0
  1368.     moveq    #$20,d1
  1369.     bra    sst共通
  1370.  
  1371. spaceS:
  1372. spc:
  1373.     moveq    #$20,d1
  1374. ss共通:
  1375.     move.w    par1+8(sp),d0
  1376. sst共通:
  1377.     lea.l    tmp,a1
  1378.     subq.w    #1,d0
  1379.     bcs    return_nula1
  1380.     cmpi.w    #$ff,d0
  1381.     bcc    文字列長すぎ
  1382. @@:
  1383.     move.b    d1,(a1)+
  1384.     dbra    d0,@b
  1385.     clr.b    (a1)
  1386.     bra    return_buf
  1387.  
  1388.  
  1389. mirrorS:
  1390.     move.l    par1+6(sp),a0
  1391.     lea.l    tmp,a1
  1392.     movea.l    a1,a2
  1393.     moveq    #-1,d0
  1394. @@:
  1395.     addq.w    #1,d0
  1396.     tst.b    (a0)+
  1397.     bne    @b
  1398.  
  1399.     subq.w    #1,d0
  1400.     bcs    return_nula1
  1401.     subq.l    #1,a0
  1402. @@:
  1403.     move.b    -(a0),(a2)+
  1404.     dbra    d0,@b
  1405.     clr.b    (a2)
  1406.     bra    return_a1
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416. *-------------------
  1417. atof:
  1418.     move.l    par1+6(sp),a0
  1419.     FPACK    __STOD        * d2,d3 は捨てていい?
  1420.     bra    return_d0d1
  1421. atoi:
  1422.     move.l    par1+6(sp),a0
  1423.     FPACK    __STOL
  1424.     bra    return_d0
  1425.  
  1426. ecvt:
  1427.     movem.l    par1+2(sp),d0-d1
  1428.     move.l    par2+6(sp),d2
  1429.     lea.l    tmp,a0
  1430.     FPACK    __ECVT
  1431.     move.l    par3+6(sp),a1
  1432.     move.l    d0,(a1)
  1433.     move.l    par4+6(sp),a1
  1434.     move.l    d1,(a1)
  1435.     bra    return_buf
  1436. fcvt:
  1437.     movem.l    par1+2(sp),d0-d1
  1438.     move.l    par2+6(sp),d2
  1439.     lea.l    tmp,a0
  1440.     FPACK    __FCVT
  1441.     move.l    par3+6(sp),a1
  1442.     move.l    d0,(a1)
  1443.     move.l    par4+6(sp),a1
  1444.     move.l    d1,(a1)
  1445.     bra    return_buf
  1446.  
  1447. gcvt:
  1448.     movem.l    par1+2(sp),d0-d1
  1449.     move.l    par2+6(sp),d2
  1450.     lea.l    tmp,a0
  1451.     FPACK    __GCVT
  1452.     bra    return_buf
  1453.  
  1454. itoa:
  1455.     move.l    par1+6(sp),d0
  1456.     lea.l    tmp,a0
  1457.     FPACK    __LTOS
  1458.     bra    return_buf
  1459.  
  1460. strS:
  1461.     movem.l    par1+2(sp),d0-d1
  1462.     lea.l    tmp,a0
  1463.     FPACK    __DTOS
  1464.     bra    return_buf
  1465.  
  1466. val:
  1467.     move.l    par1+6(sp),a0
  1468.     FPACK    __VAL
  1469.     bra    return_d0d1
  1470.  
  1471.  
  1472. *-------------------
  1473. pi:
  1474.     tst.w    par1(sp)
  1475.     bmi    @f
  1476.     movem.l    par1+2(sp),d0-d1
  1477.     FPACK    __NPI
  1478.     bra    return_d0d1
  1479. @@:
  1480. *    FPACK    __PI
  1481.     move.l    #$400921fb,d0        * π
  1482.     move.l    #$54442d18,d1
  1483.     bra    return_d0d1
  1484.  
  1485.  
  1486. abs:
  1487.     movem.l    par1+2(sp),d0-d1
  1488.     bclr    #$1f,d0
  1489.     bra    return_d0d1
  1490. fix:
  1491.     movem.l    par1+2(sp),d0-d1
  1492.     FPACK    __DFIX
  1493.     bra    return_d0d1
  1494. int:
  1495.     movem.l    par1+2(sp),d0-d1
  1496.     FPACK    __DFLOOR
  1497.     bra    return_d0d1
  1498.  
  1499. sgn:
  1500. ; __DSGN 展開 by Eriko 95/02/19
  1501. ; int i:randomize(0):for i=0 to 10000:abs(rnd()-0.5):next:end
  1502. ; 182 -> 169 (/100s@xvi24MHz-float2)
  1503. ; 68881/2 に命令があるならそっちの方が速いと思う...
  1504.  
  1505.     move.l    (par1+2,sp),d0
  1506.     bgt    sgn_pl            * +0~+∞
  1507.  
  1508.     add.l    d0,d0
  1509.     bne    sgn_minus_1        * -0 未満
  1510.  
  1511.     move.l    (par1+2+4,sp),d1
  1512.     beq    return_d0d1        * 返値:+0
  1513. sgn_minus_1:
  1514.     move.l    #$bff00000,d0
  1515.     moveq    #0,d1            * 返値:-1
  1516.     bra    return_d0d1
  1517.  
  1518. sgn_pl:
  1519.     bne    @f
  1520.     move.l    (par1+2+4,sp),d1
  1521.     beq    return_d0d1        * 返値:+0
  1522. @@:
  1523.     move.l    #$3ff00000,d0
  1524.     moveq    #0,d1            * 返値:+1
  1525.  
  1526.     bra    return_d0d1
  1527.  
  1528.  
  1529.  
  1530. sin:
  1531.     movem.l    par1+2(sp),d0-d1
  1532.     FPACK    __SIN
  1533.     bra    return_d0d1
  1534. cos:
  1535.     movem.l    par1+2(sp),d0-d1
  1536.     FPACK    __COS
  1537.     bra    return_d0d1
  1538. tan:
  1539.     movem.l    par1+2(sp),d0-d1
  1540.     FPACK    __TAN
  1541.     bra    return_d0d1
  1542. atan:
  1543.     movem.l    par1+2(sp),d0-d1
  1544.     FPACK    __ATAN
  1545.     bra    return_d0d1
  1546. log:
  1547.     movem.l    par1+2(sp),d0-d1
  1548.     FPACK    __LOG
  1549.     bra    return_d0d1
  1550. exp:
  1551.     movem.l    par1+2(sp),d0-d1
  1552.     FPACK    __EXP
  1553.     bra    return_d0d1
  1554. pow:
  1555.     movem.l    par1+2(sp),d0-d1
  1556.     movem.l    par2+2(sp),d2-d3
  1557.     FPACK    __POWER
  1558.     bra    return_d0d1
  1559. sqr:
  1560.     movem.l    par1+2(sp),d0-d1
  1561.     tst.l    d0
  1562.     bge    @f
  1563.     add.l    d0,d0
  1564.     bne    irregular_param
  1565. @@:
  1566.     FPACK    __SQR
  1567.     bra    return_d0d1
  1568.  
  1569.  
  1570. randomize:
  1571.     move.l    par1+6(sp),d0
  1572.     FPACK    __RANDOMIZE
  1573.     bra    return_zero
  1574. srand:
  1575.     move.l    par1+6(sp),d0
  1576.     FPACK    __SRAND
  1577.     bra    return_zero
  1578.  
  1579. rnd:
  1580.     FPACK    __RND
  1581.     bra    return_d0d1
  1582. rand:
  1583.     FPACK    __RAND
  1584.     bra    return_d0
  1585.  
  1586.  
  1587. *-------------------
  1588. return_d1d2:            * FLOAT型を返す
  1589.     lea.l    fac(pc),a0
  1590.     movem.l    d1-d2,2(a0)
  1591.     moveq.l    #0,d0
  1592.     rts
  1593.  
  1594. return_d0d1:            * FLOAT型を返す
  1595.     lea.l    fac(pc),a0
  1596.     movem.l    d0-d1,2(a0)
  1597.     moveq.l    #0,d0
  1598.     rts
  1599.  
  1600. return_zero:
  1601.     moveq.l    #0,d0
  1602.     lea.l    fac(pc),a0
  1603.     move.l    d0,6(a0)
  1604.     rts
  1605.  
  1606.  
  1607. file_end:
  1608.     tst.l    d0
  1609.     bge    return_d0
  1610. return_minus:
  1611.     moveq    #-1,d0
  1612. return_d0:
  1613.     lea.l    fac(pc),a0
  1614.     move.l    d0,6(a0)
  1615.     moveq.l    #0,d0
  1616.     rts
  1617.  
  1618. return_buf:
  1619.     lea.l    tmp,a1
  1620. return_a1:
  1621.     lea.l    fac(pc),a0
  1622.     move.l    a1,6(a0)
  1623.     moveq.l    #0,d0
  1624.     rts
  1625.  
  1626. return_nul:
  1627.     lea.l    tmp,a1
  1628. return_nula1:
  1629.     clr.b    (a1)
  1630.     lea.l    fac(pc),a0
  1631.     move.l    a1,6(a0)
  1632.     moveq.l    #0,d0
  1633.     rts
  1634.  
  1635. *-----------------------------
  1636.  
  1637.     .even
  1638. fac:
  1639.     .dc.w    0
  1640.     .dc.l    0
  1641.     .dc.l    0
  1642.  
  1643. *-----------------------------
  1644.  
  1645.  * 外部関数エラー
  1646.  
  1647. irregular_param:
  1648.     lea.l    _irregular_param(pc),a1
  1649.     moveq    #4,d0
  1650.     bra    1f
  1651. openmode_err:
  1652.     lea.l    _openmode_err(pc),a1
  1653.     moveq    #1,d0
  1654.     bra    1f
  1655. 無効な要素数:
  1656.     lea.l    _無効な要素数(pc),a1
  1657.     moveq    #6,d0
  1658.     bra    1f
  1659. 文字列長すぎ:
  1660.     lea.l    _文字列長すぎ(pc),a1
  1661.     moveq    #1,d0
  1662.     bra    1f
  1663. doscall_err:
  1664.     lea.l    doscall_err_mes(pc),a1
  1665.     move.w    d0,d1
  1666.     not.w    d1
  1667.     subq.w    #1,d1
  1668.     bcs    1f        * んなはずないが
  1669.     cmpi.w    #23,d1
  1670.     bhi    1f        * 謎の DOS call error
  1671. @@:
  1672.     tst.b    (a1)+
  1673.     bne    @b
  1674.     dbra    d1,@b
  1675. 1:
  1676.     lea.l    fac(pc),a0
  1677.     moveq    #-1,d1        * error off の時の返り値
  1678.     move.l    d1,6(a0)
  1679.     rts
  1680.  
  1681. _irregular_param:
  1682.     .dc.b    '引き数の範囲が不正です',0
  1683. _openmode_err:
  1684.     .dc.b    'オープンモードの指定に誤りがあります',0
  1685. _無効な要素数:
  1686.     .dc.b    '無効な要素数を指定しました',0
  1687. _文字列長すぎ:
  1688.     .dc.b    '文字列が長すぎます',0
  1689. doscall_err_mes:
  1690.     .dc.b    0
  1691.     .dc.b    '指定したファイルは見つかりません',0
  1692.     .dc.b    '指定したディレクトリは見つかりません',0
  1693.     .dc.b    'オープンしているファイルが多すぎます',0
  1694.     .dc.b    'ディレクトリやボリュームラベルはアクセスできません',0
  1695.     .dc.b    '指定したハンドルはオープンされていません',0
  1696.     .dc.b    'メモリ管理領域がこわされました',0
  1697.     .dc.b    '実行するのに必要なメモリがありません',0
  1698.     .dc.b    '無効なメモリ管理ポインタを指定しました',0
  1699.     .dc.b    '不正な環境を指定しました',0
  1700.     .dc.b    '実行ファイルのフォーマットが異常です',0
  1701.     .dc.b    'オープンでアクセスモードが異常です',0        /* ???
  1702.     .dc.b    'ファイル名の指定に誤りがあります',0
  1703.     .dc.b    '無効なパラメータでコールしました',0
  1704.     .dc.b    'ドライブ指定に誤りがあります',0
  1705.     .dc.b    'カレントディレクトリは削除できません',0
  1706.     .dc.b    0
  1707.     .dc.b    0
  1708.     .dc.b    'このファイルは書き込みができません',0
  1709.     .dc.b    'このディレクトリはすでに登録されています',0    /* ???
  1710.     .dc.b    'ファイルがあるので削除できません',0
  1711.     .dc.b    'ファイルがあるのでリネームできません',0
  1712.     .dc.b    'ディスクがいっぱいでファイルが作れません',0
  1713.     .dc.b    'ディレクトリがいっぱいでファイルが作れません',0
  1714.     .dc.b    '指定の位置にはシークできません',0
  1715.     .even
  1716.  
  1717.  
  1718.     .end
  1719.  
  1720.